]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Wrap tp_connection_get_contacts_by_handle
authorMorten Mjelva <morten.mjelva@gmail.com>
Mon, 7 Feb 2011 15:21:30 +0000 (16:21 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Wed, 16 Feb 2011 09:08:41 +0000 (10:08 +0100)
GArray support is broken in Gjs. This commit wraps
tp_connection_get_contacts_by_handle so we can retrieve TpContact objects.

src/shell-global.c
src/shell-global.h

index ec00690be35b8c286a8e53c81c480fb2584aa114..de17526ed1cb0e5479e1d61fce64be84db14c71a 100644 (file)
@@ -1964,3 +1964,63 @@ gboolean _shell_global_check_xdnd_event (ShellGlobal  *global,
 
     return FALSE;
 }
+
+/**
+ * ShellGetTpContactCb:
+ * @connection: The connection
+ * @contacts: (element-type TelepathyGLib.Contact): List of contacts
+ * @failed: Array of failed contacts
+ */
+
+static void
+shell_global_get_tp_contacts_cb (TpConnection *self,
+                                 guint n_contacts,
+                                 TpContact * const *contacts,
+                                 guint n_failed,
+                                 const TpHandle *failed,
+                                 const GError *error,
+                                 gpointer user_data,
+                                 GObject *weak_object)
+{
+  int i;
+  GList *contact_list = NULL;
+  for (i = 0; i < n_contacts; i++) {
+      contact_list = g_list_append(contact_list, contacts[i]);
+  }
+
+  TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
+  memcpy(failed_list, failed, n_failed);
+
+  ((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
+}
+
+
+/**
+ * shell_get_tp_contacts:
+ * @self: A connection, which must be ready
+ * @n_handles: Number of handles in handles
+ * @handles: (array length=n_handles) (element-type uint): Array of handles
+ * @n_features: Number of features in features
+ * @features: (array length=n_features) (allow-none) (element-type uint):
+ *  Array of features
+ * @callback: (scope async): User callback to run when the contacts are ready
+ *
+ * Wrap tp_connection_get_contacts_by_handle so we can transform the array
+ * into a null-terminated one, which gjs can handle.
+ * We send the original callback to tp_connection_get_contacts_by_handle as
+ * user_data, and we have our own function as callback, which does the
+ * transforming.
+ */
+void
+shell_get_tp_contacts (TpConnection *self,
+                       guint n_handles,
+                       const TpHandle *handles,
+                       guint n_features,
+                       const TpContactFeature *features,
+                       ShellGetTpContactCb callback)
+{
+  tp_connection_get_contacts_by_handle(self, n_handles, handles,
+                                       n_features, features,
+                                       shell_global_get_tp_contacts_cb,
+                                       callback, NULL, NULL);
+}
index 1afbdc465ecdc664d5a895dd2210e328b2290316..5d1e13de4c2b23173bcc39783519dcda1b142779 100644 (file)
@@ -8,6 +8,8 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gtk/gtk.h>
 
+#include <telepathy-glib/telepathy-glib.h>
+
 G_BEGIN_DECLS
 
 typedef struct _ShellGlobal      ShellGlobal;
@@ -142,6 +144,17 @@ void shell_global_play_theme_sound (ShellGlobal       *global,
 
 void shell_global_init_xdnd (ShellGlobal *global);
 
+typedef void (*ShellGetTpContactCb) (TpConnection *connection,
+                                     GList *contacts,
+                                     TpHandle *failed);
+
+void shell_get_tp_contacts (TpConnection *self,
+                            guint n_handles,
+                            const TpHandle *handles,
+                            guint n_features,
+                            const TpContactFeature *features,
+                            ShellGetTpContactCb callback);
+
 G_END_DECLS
 
 #endif /* __SHELL_GLOBAL_H__ */